package main

import (
	"fmt"
	"sync"
)

func printNumber(wg *sync.WaitGroup, ch chan struct{}) {
	defer wg.Done()
	for i := 1; i <= 10; i++ {
		<-ch // 等待信号
		fmt.Printf("%d\n ", i)
	}
}

func printLetter(wg *sync.WaitGroup, ch chan struct{}) {
	defer wg.Done()
	for i := 'A'; i <= 'J'; i++ {
		ch <- struct{}{} // 发送信号
		fmt.Printf("%c\n", i)
	}
}

func main() {
	var wg sync.WaitGroup
	ch := make(chan struct{}) // 无缓冲通道

	wg.Add(2)
	go printNumber(&wg, ch)
	go printLetter(&wg, ch)

	ch <- struct{}{} // 初始信号
	wg.Wait()        // 确保所有goroutine执行完毕
	fmt.Println()    // 打印换行
}
